﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using LHS.Core.TableInfo;
using MS.Core.Constants.Objects;
using System.Collections.Specialized;
using System.Collections;

namespace LHS.Win
{
    public partial class frmDiagnoseSyptom : Form
    {
        LHS.Core.Clinical.ClinicalController objController = new LHS.Core.Clinical.ClinicalController();
        // Methods sample
        public frmDiagnoseSyptom()
        {
            this.InitializeComponent();
        }

        private void AddParentNode(string nodeName, DataRow Node)
        {
            this.node = new MyNode(Node);
            this.node.Text = nodeName;
        }

        private void AddParentNodeChild(string nodeName, DataRow Node)
        {
            this.nodeChild = new MyNode(Node);
            this.nodeChild.Text = nodeName;
        }

        private void AddParentNodeParentOfChild(string nodeName, DataRow Node)
        {
            this.nodeParentOfChild = new MyNode(Node);
            this.nodeParentOfChild.Text = nodeName;
        }

        private void btCapNhat_Click(object sender, EventArgs e)
        {
            string sql = string.Empty;
            if (this.raSickTree.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên chẩn đoán từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                MyNode selectedNode = (MyNode)this.tvChildList.SelectedNode;
                string str2 = string.Empty;
                str2 = selectedNode.DataRow[InfoPathologicalSigns.PLSISN].ToString();
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoPathologicalSigns.PLSPATHOLOGICALSIGNS, this.txtSickNode.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoPathologicalSigns.PLSISN, str2));
                    objController.UpdateRow(InfoPathologicalSigns.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên chẩn đoán", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtSickNode.Text = "";
                    this.cboSickTree.Enabled = true;
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }

            }
            else if (this.raCayChanDoan.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây chẩn đoán từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                MyNode node2 = (MyNode)this.tvParentList.SelectedNode;
                string str3 = string.Empty;
                str3 = node2.DataRow[InfoPathologicalTree.PLTISN].ToString();
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoPathologicalTree.PLTNAME, this.txtCayBenh.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoPathologicalTree.PLTISN, str3));
                    objController.UpdateRow(InfoPathologicalTree.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên cây chẩn đoán", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtCayBenh.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raNode.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên triệu chứng từ danh sách ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                MyNode node3 = (MyNode)this.tvChildList.SelectedNode;
                string str4 = string.Empty;
                str4 = node3.DataRow[InfoSicks.SCKISN].ToString();
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoSicks.SCKNAME, this.txtSickNode.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoSicks.SCKISN, str4));
                    objController.UpdateRow(InfoSicks.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên triệu chứng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtSickNode.Text = "";
                    this.cboSickTree.Enabled = true;
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raCayTrieuChung.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây triệu chứng từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                MyNode node4 = (MyNode)this.tvParentList.SelectedNode;
                string str5 = string.Empty;
                str5 = node4.DataRow[InfoSickTree.SKTISN].ToString();
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoSickTree.SKTNAME, this.txtCayBenh.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoSickTree.SKTISN, str5));
                    objController.UpdateRow(InfoSickTree.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên cây triệu chứng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtCayBenh.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raNoiSoi.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên nội soi từ danh sách ", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                MyNode node5 = (MyNode)this.tvChildList.SelectedNode;
                string s = string.Empty;
                string str7 = string.Empty;
                s = node5.DataRow[InfoInnerScan.NSCISN].ToString();
                str7 = this.tvChildList.SelectedNode.Text.ToString();
                try
                {
                    List<ExpressionObject> paramGet = new List<ExpressionObject>();
                    paramGet.Add(new ExpressionObject(InfoInnerScan.NSCISNROOT, int.Parse(s)));
                    paramGet.Add(new ExpressionObject(InfoInnerScan.NSCNAME, str7));
                    DataTable dtInnerScan = objController.GetData(InfoInnerScan.TABLENAME, paramGet);

                    if (dtInnerScan == null || dtInnerScan.Rows.Count == 0)
                    {
                        return;
                    }

                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoInnerScan.NSCNAME, this.txtSickNode.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoInnerScan.NSCISN, dtInnerScan.Rows[0][0].ToString()));
                    objController.UpdateRow(InfoInnerScan.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên nội soi", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtSickNode.Text = "";
                    this.cboSickTree.Enabled = true;
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây nội soi từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                MyNode node6 = (MyNode)this.tvParentList.SelectedNode;
                string str9 = string.Empty;
                str9 = node6.DataRow[InfoInnerScan.NSCISN].ToString();
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoInnerScan.NSCNAME, this.txtCayBenh.Text);
                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoInnerScan.NSCISN, str9));
                    objController.UpdateRow(InfoInnerScan.TABLENAME, updateField, param);

                    MessageBox.Show("Đã cập nhật tên cây nội soi", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtCayBenh.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            this.frmDiagnoseSyptom_Load(sender, e);
        }

        private void btDelete_Click(object sender, EventArgs e)
        {
            if (this.raSickTree.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên chẩn đoán từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa tên chẩn đoán ?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode selectedNode = (MyNode)this.tvChildList.SelectedNode;
                    string str2 = string.Empty;
                    str2 = selectedNode.DataRow[InfoPathologicalClinical.PLSISN].ToString();
                    try
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoPathologicalClinical.PLSISN, str2);
                        objController.Exec_StoreProc("sp_Pathological_Delete", param);

                        MessageBox.Show("Đã xóa tên chẩn đoán", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtSickNode.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }
                }
                this.cboSickTree.Enabled = true;
            }
            else if (this.raCayChanDoan.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây chẩn đoán từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa cây chẩn đoán này không ?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode node2 = (MyNode)this.tvParentList.SelectedNode;
                    string str3 = string.Empty;
                    str3 = node2.DataRow[InfoPathologicalTree.PLTISN].ToString();
                    try
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoPathologicalTree.PLTISN, str3);
                        objController.Exec_StoreProc("sp_PathologicalTree_Delete", param);

                        MessageBox.Show("Đã xóa tên cây chẩn đoán", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtCayBenh.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }
                }
            }
            else if (this.raNode.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên triệu chứng từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa tên triệu chứng này không ? ", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode node3 = (MyNode)this.tvChildList.SelectedNode;
                    string str4 = string.Empty;
                    str4 = node3.DataRow[InfoSicks.SCKISN].ToString();
                    try
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoSicks.SCKISN, str4);
                        objController.Exec_StoreProc("sp_Sick_Delete", param);

                        MessageBox.Show("Đã xóa tên triệu chứng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtSickNode.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }

                }
                this.cboSickTree.Enabled = true;
            }
            else if (this.raCayTrieuChung.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây triệu chứng từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa cây triệu chứng này không ?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode node4 = (MyNode)this.tvParentList.SelectedNode;
                    string str5 = string.Empty;
                    str5 = node4.DataRow[InfoSickTree.SKTISN].ToString();
                    try
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoSickTree.SKTISN, str5);
                        objController.Exec_StoreProc("sp_SickTree_Delete", param);

                        MessageBox.Show("Đã xóa tên cây triệu chứng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtCayBenh.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }
                }
            }
            else if (this.raNoiSoi.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.tvChildList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên nội soi từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa tên nội soi này không ? ", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode node5 = (MyNode)this.tvChildList.SelectedNode;
                    string s = string.Empty;
                    string str7 = string.Empty;
                    s = node5.DataRow["nscISN"].ToString();
                    str7 = this.tvChildList.SelectedNode.Text.ToString();
                    try
                    {
                        ListDictionary paramGet = new ListDictionary();
                        paramGet.Add(InfoInnerScan.NSCISNROOT, int.Parse(s));
                        paramGet.Add(InfoInnerScan.NSCNAME, str7);
                        object iNSCISN = objController.GetScalar(InfoInnerScan.NSCISN, InfoInnerScan.TABLENAME);

                        if (iNSCISN == null || !(iNSCISN is int))
                        {
                            return;
                        }

                        ListDictionary param = new ListDictionary();
                        param.Add(InfoInnerScan.NSCISN, iNSCISN);
                        objController.Exec_StoreProc("sp_InnerScan_Delete", param);

                        MessageBox.Show("Đã xóa tên nội soi", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtSickNode.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }
                }
                this.cboSickTree.Enabled = true;
            }
            else
            {
                if (this.tvParentList.Nodes.Count == 0)
                {
                    return;
                }
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng chọn tên cây nội soi từ danh sách", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                if (MessageBox.Show("Bạn có đồng ý xóa cây nội soi này không ?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    MyNode node6 = (MyNode)this.tvParentList.SelectedNode;
                    string str9 = string.Empty;
                    str9 = node6.DataRow[InfoInnerScan.NSCISN].ToString();
                    try
                    {
                        ListDictionary param = new ListDictionary();
                        param.Add(InfoInnerScan.NSCISN, str9);
                        objController.Exec_StoreProc("sp_InnerScan_Delete", param);

                        MessageBox.Show("Đã xóa tên cây nội soi", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.txtCayBenh.Text = "";
                    }
                    catch (Exception ex)
                    {
                        Class.ShowException(ex);
                    }
                }
            }
            this.frmDiagnoseSyptom_Load(sender, e);
        }

        private void btExit_Click(object sender, EventArgs e)
        {
            base.Close();
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            string sql = string.Empty;
            if (this.raSickTree.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên chẩn đoán mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }
                try
                {
                    DataTable dt = InfoPathologicalSigns.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoPathologicalSigns.PLSPATHOLOGICALSIGNS] = this.txtSickNode.Text;
                    dr[InfoPathologicalSigns.PLTISN] = this.cboSickTree.SelectedValue.ToString();
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoPathologicalSigns.PLSISN });

                    this.txtSickNode.Text = "";
                    MessageBox.Show("Đã thêm một tên chẩn đoán mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raCayChanDoan.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên cây chẩn đoán mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }

                try
                {
                    DataTable dt = InfoPathologicalTree.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoPathologicalTree.PLTNAME] = this.txtCayBenh.Text;
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoPathologicalTree.PLTISN });

                    MessageBox.Show("Đã thêm một cây chẩn đoán mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtCayBenh.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raNode.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên triệu chứng mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }

                try
                {
                    DataTable dt = InfoSicks.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoSicks.SCKNAME] = this.txtSickNode.Text;
                    dr[InfoSicks.SKTISN] = this.cboSickTree.SelectedValue.ToString();
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoSicks.SCKISN });

                    MessageBox.Show("Đã thêm một tên triệu chứng mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtSickNode.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raCayTrieuChung.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên cây triệu chứng mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }

                try
                {
                    DataTable dt = InfoSickTree.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoSickTree.SKTNAME] = this.txtCayBenh.Text;
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoSickTree.SKTISN });

                    this.txtCayBenh.Text = "";
                    MessageBox.Show("Đã thêm một tên cây triệu chứng mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else if (this.raNoiSoi.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                if (this.txtSickNode.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên nội soi mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtSickNode.Focus();
                    return;
                }

                try
                {
                    DataTable dt = InfoInnerScan.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoInnerScan.NSCNAME] = this.txtSickNode.Text;
                    dr[InfoInnerScan.NSCISNROOT] = this.cboSickTree.SelectedValue.ToString();
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoInnerScan.NSCISN });

                    MessageBox.Show("Đã thêm một tên nội soi mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.txtSickNode.Text = "";
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            else
            {
                if (this.txtCayBenh.Text == "")
                {
                    MessageBox.Show("Vui lòng nhập tên cây nội soi mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    this.txtCayBenh.Focus();
                    return;
                }
                try
                {
                    DataTable dt = InfoInnerScan.GetStructure();
                    DataRow dr = dt.NewRow();
                    dr[InfoInnerScan.NSCNAME] = this.txtCayBenh.Text;
                    dr[InfoInnerScan.NSCISNROOT] = 0;
                    dt.Rows.Add(dr);
                    objController.InsertRow(dr, new string[] { InfoInnerScan.NSCISN });

                    this.txtCayBenh.Text = "";
                    MessageBox.Show("Đã thêm một tên cây nội soi mới", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
            this.frmDiagnoseSyptom_Load(sender, e);
        }

        private void checkLoadTrieuChungOrChanDoan()
        {
            if (this.raCayTrieuChung.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                this.loadTrieuChung();
            }
            else if (this.raNode.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                this.loadTrieuChung();
            }
            else if (this.raCayChanDoan.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                this.loadChanDoan();
            }
            else if (this.raSickTree.Checked && (this.tabControl1.SelectedIndex == 1))
            {
                this.loadChanDoan();
            }
            else if (this.raCayNoiSoi.Checked && (this.tabControl1.SelectedIndex == 0))
            {
                this.loadNoiSoi();
            }
            else
            {
                this.loadNoiSoi();
            }
        }
        private void frmDiagnoseSyptom_Load(object sender, EventArgs e)
        {
            base.AcceptButton = this.btThem;
            this.btCapNhat.Enabled = true;
            this.btDelete.Enabled = true;
            this.btThem.Enabled = true;
            this.txtCayBenh.Text = "";
            this.txtSickNode.Text = "";
            this.checkLoadTrieuChungOrChanDoan();
        }

        private DataSet getDsDiagNose()
        {
            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoSickTree.SKTNAME, "asc");
            orderby.Add(InfoSicks.SCKNAME, "asc");
            DataTable dt = objController.GetData("vw_SickTree_Sicks", null, orderby);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private DataSet getDsDiagNoseParent()
        {
            ArrayList arrColumn = new ArrayList();
            arrColumn.Add(InfoSickTree.SKTNAME);
            arrColumn.Add(InfoSickTree.SKTISN);
            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoSickTree.SKTNAME, "asc");
            DataTable dt = objController.GetData("vw_SickTree_Sicks", true, arrColumn, null, orderby);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private DataSet getDsNoiSoi()
        {
            ArrayList arrColumn = new ArrayList();
            arrColumn.Add(InfoInnerScan.NSCISN + " as nscISNTrue");
            arrColumn.Add("nscISNChild as " + InfoInnerScan.NSCISN);
            arrColumn.Add(InfoInnerScan.NSCNAME);
            arrColumn.Add("nscISNChild");
            arrColumn.Add("nscNameChild");
            arrColumn.Add("Root1");
            arrColumn.Add("Root2");
            arrColumn.Add("Root3");

            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoInnerScan.NSCNAME, "asc");
            orderby.Add("nscNameChild", "asc");
            DataTable dt = objController.GetData("vw_InnerScan", true, arrColumn, null, orderby);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private DataSet getDsNoiSoiChild()
        {
            ArrayList arrColumn = new ArrayList();
            arrColumn.Add("nscISNChild as " + InfoInnerScan.NSCISN);
            arrColumn.Add("nscISNChild");
            arrColumn.Add("nscNameChild");
            arrColumn.Add("nscISNLevelThree");
            arrColumn.Add("nscNameLevelThree");

            List<ExpressionObject> param = new List<ExpressionObject>();
            param.Add(new ExpressionObject("nscISNLevelThree", "is not null", ExpressionObject.eSelectOperator.None));

            DataTable dt = objController.GetData("vw_InnerScan", false, arrColumn, param);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private DataSet getDsNoiSoiParent()
        {
            ArrayList arrColumn = new ArrayList();
            arrColumn.Add(InfoInnerScan.NSCNAME);
            arrColumn.Add(InfoInnerScan.NSCISN);

            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoInnerScan.NSCNAME, "asc");
            DataTable dt = objController.GetData("vw_InnerScan", true, arrColumn, null, orderby);
            dt.TableName = InfoInnerScan.TABLENAME;
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds; // TableName = InnerScan ---> da sua thanh vw_InnerScan --> edit by thaoht --> kiem tra lai
        }

        private DataSet getDsSyptom()
        {
            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoPathologicalTree.PLTNAME, "asc");
            orderby.Add(InfoPathologicalSigns.PLSPATHOLOGICALSIGNS, "asc");
            DataTable dt = objController.GetData("vw_PathologicalSign", false, null, null, orderby);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private DataSet getDsSyptomParent()
        {
            ArrayList arrColumn = new ArrayList();
            arrColumn.Add(InfoPathologicalTree.PLTNAME);
            arrColumn.Add(InfoPathologicalTree.PLTISN);

            ListDictionary orderby = new ListDictionary();
            orderby.Add(InfoPathologicalTree.PLTNAME, "asc");
            DataTable dt = objController.GetData("vw_PathologicalSign", true, arrColumn, null, orderby);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;
        }

        private void loadChanDoan()
        {
            this.tvChildList.Nodes.Clear();
            this.tvParentList.Nodes.Clear();
            DataSet set = this.getDsSyptomParent();
            DataSet set2 = this.getDsSyptom();
            if (((set2 == null) || (set2.Tables.Count == 0)) || (set2.Tables[0].Rows.Count == 0))
            {
                this.tabControl1.SelectedIndex = 0;
            }
            else if (this.tabControl1.SelectedIndex == 0)
            {
                for (int i = 0; i < set.Tables[0].Rows.Count; i++)
                {
                    this.AddParentNode(set.Tables[0].Rows[i][InfoPathologicalTree.PLTNAME].ToString(), set.Tables[0].Rows[i]);
                    this.tvParentList.Nodes.Add(this.node);
                }
            }
            else
            {
                if (this.loadCayBenh)
                {
                    this.cboSickTree.DataSource = set;
                    this.cboSickTree.DisplayMember = set.Tables[0].ToString() + "." + InfoPathologicalTree.PLTNAME;
                    this.cboSickTree.ValueMember = set.Tables[0].ToString() + "." + InfoPathologicalTree.PLTISN;
                    this.loadCayBenh = false;
                }
                for (int j = 0; j < set.Tables[0].Rows.Count; j++)
                {
                    this.AddParentNode(set.Tables[0].Rows[j][InfoPathologicalTree.PLTNAME].ToString(), set.Tables[0].Rows[j]);
                    this.tvChildList.Nodes.Add(this.node);
                    this.tvChildList.SelectedNode = this.node;
                    for (int k = 0; k < set2.Tables[0].Rows.Count; k++)
                    {
                        if ((set2.Tables[0].Rows[k][InfoPathologicalTree.PLTNAME].ToString() == this.tvChildList.SelectedNode.Text) && (set2.Tables[0].Rows[k]["plsPathologicalSigns"].ToString() != string.Empty))
                        {
                            this.AddParentNode(set2.Tables[0].Rows[k][InfoPathologicalSigns.PLSPATHOLOGICALSIGNS].ToString(), set2.Tables[0].Rows[k]);
                            this.tvChildList.SelectedNode.Nodes.Add(this.node);
                        }
                    }
                }
            }
        }

        private void loadNoiSoi()
        {
            this.tvChildList.Nodes.Clear();
            this.tvParentList.Nodes.Clear();
            DataSet set = this.getDsNoiSoiChild();
            DataSet set2 = this.getDsNoiSoi();
            DataSet set3 = this.getDsNoiSoiParent();
            if (((set2 == null) || (set2.Tables.Count == 0)) || (set2.Tables[0].Rows.Count == 0))
            {
                this.tabControl1.SelectedIndex = 0;
            }
            else if (this.tabControl1.SelectedIndex == 0)
            {
                for (int i = 0; i < set3.Tables[0].Rows.Count; i++)
                {
                    this.AddParentNode(set3.Tables[0].Rows[i][InfoInnerScan.NSCNAME].ToString(), set3.Tables[0].Rows[i]);
                    this.tvParentList.Nodes.Add(this.node);
                    this.tvParentList.SelectedNode = this.node;
                    for (int j = 0; j < set2.Tables[0].Rows.Count; j++)
                    {
                        if (((set2.Tables[0].Rows[j][InfoInnerScan.NSCNAME].ToString() == set3.Tables[0].Rows[i][InfoInnerScan.NSCNAME].ToString()) && (set2.Tables[0].Rows[j]["nscNameChild"].ToString() != string.Empty)) && ((set2.Tables[0].Rows[j]["nscISNTrue"].ToString() == "2") || (set2.Tables[0].Rows[j]["nscISNTrue"].ToString() == "1")))
                        {
                            this.AddParentNodeParentOfChild(set2.Tables[0].Rows[j]["nscNameChild"].ToString(), set2.Tables[0].Rows[j]);
                            this.tvParentList.SelectedNode.Nodes.Add(this.nodeParentOfChild);
                        }
                    }
                }
            }
            else
            {
                if (this.loadCayBenh)
                {
                    DataTable dt = objController.GetInnerScan();
                 
                    this.cboSickTree.DataSource = dt;
                    this.cboSickTree.DisplayMember = InfoInnerScan.NSCNAME;
                    this.cboSickTree.ValueMember =  InfoInnerScan.NSCISN;
                    this.loadCayBenh = false;
                }
                for (int k = 0; k < set3.Tables[0].Rows.Count; k++)
                {
                    this.AddParentNode(set3.Tables[0].Rows[k][InfoInnerScan.NSCNAME].ToString(), set3.Tables[0].Rows[k]);
                    this.tvChildList.Nodes.Add(this.node);
                    this.tvChildList.SelectedNode = this.node;
                    for (int m = 0; m < set2.Tables[0].Rows.Count; m++)
                    {
                        if ((set2.Tables[0].Rows[m][InfoInnerScan.NSCNAME].ToString() == set3.Tables[0].Rows[k][InfoInnerScan.NSCNAME].ToString()) && (set2.Tables[0].Rows[m]["nscNameChild"].ToString() != string.Empty))
                        {
                            this.AddParentNodeParentOfChild(set2.Tables[0].Rows[m]["nscNameChild"].ToString(), set2.Tables[0].Rows[m]);
                            this.tvChildList.SelectedNode = this.node;
                            this.tvChildList.SelectedNode.Nodes.Add(this.nodeParentOfChild);
                            if (set2.Tables[0].Rows[m]["Root3"].ToString() != "")
                            {
                                for (int n = 0; n < set.Tables[0].Rows.Count; n++)
                                {
                                    if ((set.Tables[0].Rows[n]["nscNameChild"].ToString() == set2.Tables[0].Rows[m]["nscNameChild"].ToString()) && (set.Tables[0].Rows[n]["nscNameLevelThree"].ToString() != string.Empty))
                                    {
                                        this.AddParentNodeChild(set.Tables[0].Rows[n]["nscNameLevelThree"].ToString(), set.Tables[0].Rows[n]);
                                        this.tvChildList.SelectedNode = this.nodeParentOfChild;
                                        this.tvChildList.SelectedNode.Nodes.Add(this.nodeChild);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        private void loadTrieuChung()
        {
            this.tvChildList.Nodes.Clear();
            this.tvParentList.Nodes.Clear();
            DataSet set = this.getDsDiagNose();
            DataSet set2 = this.getDsDiagNoseParent();
            if (((set == null) || (set.Tables.Count == 0)) || (set.Tables[0].Rows.Count == 0))
            {
                this.tabControl1.SelectedIndex = 0;
            }
            else if (this.tabControl1.SelectedIndex == 0)
            {
                for (int i = 0; i < set2.Tables[0].Rows.Count; i++)
                {
                    this.AddParentNode(set2.Tables[0].Rows[i][InfoSickTree.SKTNAME].ToString(), set2.Tables[0].Rows[i]);
                    this.tvParentList.Nodes.Add(this.node);
                }
            }
            else
            {
                if (this.loadCayBenh)
                {
                    this.cboSickTree.DataSource = set2;
                    this.cboSickTree.DisplayMember = set2.Tables[0].ToString() + "." + InfoSickTree.SKTNAME;
                    this.cboSickTree.ValueMember = set2.Tables[0].ToString() + "." + InfoSickTree.SKTISN;
                    this.loadCayBenh = false;
                }
                for (int j = 0; j < set2.Tables[0].Rows.Count; j++)
                {
                    this.AddParentNode(set2.Tables[0].Rows[j][InfoSickTree.SKTNAME].ToString(), set2.Tables[0].Rows[j]);
                    this.tvChildList.Nodes.Add(this.node);
                    this.tvChildList.SelectedNode = this.node;
                    for (int k = 0; k < set.Tables[0].Rows.Count; k++)
                    {
                        if ((set.Tables[0].Rows[k][InfoSickTree.SKTNAME].ToString() == this.tvChildList.SelectedNode.Text) && (set.Tables[0].Rows[k][InfoSicks.SCKNAME].ToString() != string.Empty))
                        {
                            this.AddParentNode(set.Tables[0].Rows[k][InfoSicks.SCKNAME].ToString(), set.Tables[0].Rows[k]);
                            this.tvChildList.SelectedNode.Nodes.Add(this.node);
                        }
                    }
                }
            }
        }

        private void raNode_CheckedChanged(object sender, EventArgs e)
        {
            this.loadCayBenh = true;
            this.frmDiagnoseSyptom_Load(sender, e);
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.loadCayBenh = true;
            this.frmDiagnoseSyptom_Load(sender, e);
            this.cboSickTree.Enabled = true;
        }

        private void tvChildList_DoubleClick(object sender, EventArgs e)
        {
            string s = this.tvChildList.SelectedNode.Text.ToString();
            try
            {
                int num = this.cboSickTree.FindStringExact(s);
                if (num < 0)
                {
                    this.txtSickNode.Text = s;
                    num = this.cboSickTree.FindStringExact(this.tvChildList.SelectedNode.Parent.Text);
                    if (num >= 0)
                    {
                        this.cboSickTree.SelectedIndex = num;
                        this.btThem.Enabled = false;
                        this.cboSickTree.Enabled = false;
                        this.btCapNhat.Enabled = true;
                        this.btDelete.Enabled = true;
                        base.AcceptButton = this.btCapNhat;
                    }
                }
                else
                {
                    this.txtSickNode.Text = "";
                    this.cboSickTree.SelectedIndex = num;
                    this.cboSickTree.Enabled = true;
                    this.btThem.Enabled = true;
                    this.btCapNhat.Enabled = false;
                    this.btDelete.Enabled = false;
                    base.AcceptButton = this.btThem;
                }
            }
            catch
            {
            }
        }

        private void tvChildList_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                this.tvChildList_DoubleClick(sender, e);
            }
            else if (e.KeyChar == '\x001b')
            {
                this.cboSickTree.Enabled = true;
                this.txtSickNode.Text = "";
                this.btThem.Enabled = true;
                this.btCapNhat.Enabled = false;
                this.btDelete.Enabled = false;
                base.AcceptButton = this.btThem;
            }
        }

        private void tvParentList_DoubleClick(object sender, EventArgs e)
        {
            this.txtCayBenh.Text = this.tvParentList.SelectedNode.Text;
            this.btThem.Enabled = false;
            base.AcceptButton = this.btCapNhat;
        }

        private void tvParentList_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\x001b')
            {
                this.txtCayBenh.Text = "";
                this.btThem.Enabled = true;
                base.AcceptButton = this.btThem;
            }
        }


    }
}